/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package ec.edu.ups.cidi.siia.plamdep.analizadorLexico.wordnet;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import ec.edu.ups.cidi.siia.plamdep.analizadorLexico.analisis.AnalisisUtils;
import ec.edu.ups.cidi.siia.plamdep.analizadorLexico.analisis.Recursos;

/**
 *
 * @author Usuario
 */
public class WordNet 
{
 
	
    /**
     * Metodo que realiza realiza la consulta a la base para listar los sinonimos
     * @throws SQLException 
     */
    public ArrayList<String> getSinonimos(String palabra,String lema) 
    {
      ArrayList<String> sinonimos=new ArrayList();
      ResultSet rs=null;
      try
        {
    	  String sql="select distinct word " +
                  " from palabra v1, " +
                  " significados s " +
                  " where v1.offset in  "+
                  
                  "(select v2.offset "+
                  "	from palabra v2 "+
                  "	where upper(v2.word)= upper('"+palabra+"') or "+
                  " upper(v2.word)= upper('"+lema+"') ) " +
                  
                  " and s.offset=v1.offset";
    	   sql=sql.replace("\n"," ");
    	  	//System.out.println("SQL sinonimos:"+sql);
             rs=Recursos.conexion.consulta(sql);
              
            while(rs.next()) sinonimos.add(rs.getString(1));
        }
        catch(Exception ex)
        {
         System.out.println("Error cargando sinonimos: " + ex.getMessage());
         ex.printStackTrace();
        }  
      	finally
      	{
      		try {
				rs.close();
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}

      	}
      return sinonimos;
    }
    
    /**
     * Metodo que realiza realiza la consulta a la base para listar los antonimos
     */
    public ArrayList<String> getAntonimos(String palabra)
    {
     	ResultSet rs=null;
       ArrayList<String> antonimos=new ArrayList();
       try
        {
            rs=Recursos.conexion.consulta(" select distinct v2.word p2 "
            										+ " from "
            										+ " 	(select * from relaciones   where relation=33)r,"
            										+ "		(select * from palabra where upper(word)=upper('"+palabra+"'))v1,"
            										+ "		 palabra v2 "
            										+ " where"
            										+ "		v1.offset=r.\"sourceSynset\" and"
            										+ "		v2.offset=r.\"targetSynset\"");
            while(rs.next()) antonimos.add(rs.getString(1));
        }
        catch(Exception ex)
        {
         System.out.println("Error de cargando antonimos: " + ex.getMessage());
        }
     	finally
     	{
     		try {
				rs.close();
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
     	}

       return antonimos;
    }
    /**
     * Metodo que realiza realiza la consulta a la base para para cargar el significado de la palabra
     */
    public  ArrayList<String> getSignificados(String palabra)
    {
         ArrayList<String> significados=new ArrayList();
      try
        {
            ResultSet rs=Recursos.conexion.consulta("select s.GLOSS\n" +
                                                         " from significados s, palabra p\n" +
                                                         " where \n" +
                                                         "p.WORD like '"+palabra+"'\n" +
                                                         "and s.GLOSS <> 'NULL'\n" +
                                                         "and  s.OFFSET like p.OFFSET  ");
            while(rs.next()) significados.add(rs.getString(1));
        }
        catch(Exception ex)
        {
         System.out.println("Error de cargando sinonimos: " + ex.getMessage());
        }  
      return significados;
    }
    /**
     * Metodo que realiza realiza la consulta a la base para para cargar las traducciones a ingles de una palabra
     */
    public ArrayList<String> getEngTraduccion(String palabra)
    {
      ArrayList<String> traducciones=new ArrayList();
      try
        {
            ResultSet rs=Recursos.conexion.consulta(" select ing.word, ing.pos\n" +
                                                        "from(\n" +
                                                        "select es1.offset\n" +
                                                        "from  palabra as es1\n" +
                                                        "where es1.word like '"+palabra.toLowerCase()+"') as es,\n" +
                                                        "palabra_eng as ing\n" +
                                                        "where substring(es.offset,5,13) = substring(ing.offset,5,13);");
            while(rs.next())  traducciones.add(rs.getString(1));
        }
        catch(Exception ex)
        {
         System.out.println("Error de cargando sinonimos: " + ex.getMessage());
        }  
      return traducciones;
    }
    
    
}
